# 4  编写装饰器来实现，对目标函数进行装饰,计算函数的运行耗时，
#     分3种情况：目标函数无参数无返回值，目标函数有参数，目标函数有返回值；
#      三个目标函数分别为：
#      A 打印输出20000之内的素数；
#      B 计算整数2-10000之间的素数的个数；
#      C 计算整数2-M之间的素数的个数；
#   可以观看给的视频材料，仿照示例来做；
import time

def display_time(func):
    def inner(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        end = time.time()
        print(f'{func.__name__} spend time {end-start}')
        return res
    return inner

def is_prime(num):
    if num < 2:
        return False
    elif num == 2:
        return True
    else:
        for i in range(2, num):
            if num%i == 0:
                return False
        return True

@display_time
def funcA():
    for i in range(2, 20000):
        if is_prime(i):
            print(i)

@display_time
def funcB():
    count = 0
    for i in range(2, 10000):
        if is_prime(i):
            count += 1
    return count

@display_time
def funcC(M):
    count = 0
    for i in range(2, M+1):
        if is_prime(i):
            count += 1
    return count

funcA()
b = funcB()
M = 100
c = funcC(M)
print(f'整数2-10000之间的素数的个数{b}')
print(f'整数2-{M}之间的素数的个数{c}')
